When software developers correct a problem in the source code of a computer program (such as an operating system kernel), they typically create and distribute a patch, which consists of a set of changes to the source code. Software vendors or system administrators apply the patch to their copy of the source code, build a new binary copy of the computer program, and then distribute that new binary program to servers and end-user machines. The updated program must then be restarted in order to benefit from the update. Restarting programs in order to update them can cause undesirable disruption.
A “hot update” changes a running program without restarting it. Existing hot update systems that are designed to update “legacy binaries” (i.e., mostly-unmodified binaries that are created with essentially no foresight of the update system) rely on a programmer to write source code files with certain properties (e.g., as in LUCOS and DynAMOS), or the systems cannot achieve safety guarantees or determine what values to use for ambiguous symbols without a programmer laboriously inspecting the running program (e.g., as in OPUS).